/*!
* AJAX请求
* @param string u, 以GET方式快速请求URL
* @param object u, 以复杂参数请求URL
* @param function f, 请求完成后回调fn方法
*/
$.fn.require = function(u, f){
	var a = {}, 
		o = {},
		f = $.type(f) == 'function' ? f : function(){};
	/*!
	* 以URL为参数
	* @example $.fn.require('http://', function(){....});
	*/
	if ($.type(u) == 'string'){
		a.url = u;
	}
	/*!
	* 以OBJECT为参数
	* @note 各参数项同$.ajax
	*/
	else if ($.isPlainObject(u) && u.url){
		a.url = u.url; o = u;
	}
	/*!
	* URL为必须参数
	*/
	if (!a.url){
		return;
	}
	/*!
	* 附件参数
	* @note 支持a=b&c=d或{a:'b',c:'d'}
	*/
	a.data = o.data || '';
	/*!
	* 请求格式
	* @note 支持HTML|JSON|XML|SCRIPT
	*/
	a.dataType = o.dataType ? o.dataType.toString().toUpperCase() : 'HTML';
	/*!
	* 请求方式
	* @note 支持GET|POST|PUT|DELETE
	*/
	a.type = o.type ? o.type.toString().toUpperCase() : 'GET';
	/*!
	* 请求处理
	*/
	var abase = o.typeMode !== 'MUIPAGE', c = function(cs){
		/*!
		* JSON请求
		*/
		if (a.dataType === 'JSON'){
			var json = $.isPlainObject(cs) || {};
				json.errno = json.errno === undefined ? 0 : json.error;
				json.error = json.error === undefined ? '' : json.error;
			return f(a, json);
		}
		/*!
		* HTML请求
		*/
		if (a.dataType === 'HTML'){
			cs = cs.replace(/\r/g, '<!--{[r]}-->').replace(/\n/g, '<!--{[n]}-->');
			/*!
			* 获取标题
			*/
			var ti = '&#160;', 
				tm = /\<title\>(.*)\<\/title\>/im.exec(cs) || [];
			if (tm.length == 2){
				ti = tm[1]
			}
			/*!
			* 获取正文
			*/
			var htm = '&#160;', 
				hti = true;
			/*!
			* 片段提取
			*/
			if (abase){
				var mws = /\<\!\-\-\(wscajax\)\-\-\>(.+)\<\!\-\-\(\/wscajax\)\-\-\>/im.exec(cs) || []; if (mws.length == 2){
					hti = false; htm = mws[1];
				}
			}
			/*!
			* 主体提取
			*/
			if (hti) {
				var mws = /\<body\>(.*)\<\/body\>/im.exec(cs) || []; if (mws.length == 2){
					htm = mws[1];
				}
			}
			/*!
			* 回调处理
			*/
			htm = htm.replace(/\<\!\-\-\{\[r\]\}\-\-\>/ig, "\r").replace(/\<\!\-\-\{\[n\]\}\-\-\>/ig, "\n");
			return f(a, htm, ti);
		}		
		/*!
		* 其它请求
		*/
		f(a, cs);
	};
	/*!
	* 执行请求
	*/
	$.ajax(o).fail(function(af){c(af.responseText);}).done(function(ad){c(ad);});
};